/*
  乔斯方阵转换
  题目描述
    乔斯方阵是一个由 n × n 的字母方阵，方阵内可能蕴含单词 “qiaosi”。
    现在有两个乔斯方阵，希望你能判断最少通过什么操作能将第一个原始乔斯方阵转换成第二个目标乔斯方阵。
      操作 1：将乔斯方阵顺时针旋转 90 度
      操作 2：将乔斯方阵顺时针旋转 180 度
      操作 3：将乔斯方阵逆时针旋转 90 度
      操作 4：将乔斯方阵水平翻转（ A ∣ B −> B ∣ A）
      操作 5：执行操作 4 后，再执行操作 1-3 中的一个
      操作 6：不改变方阵
      操作 7：无法通过上述操作将原始乔斯方阵转换成目标乔斯方阵
    如果多种操作可以完成，请输出序号最小的一个。
  输入
    共 2n+1 行。
    第 1 行：输入一个数 n。
    第 2 行至第 n+1 行：输入 n×n 的原始乔斯方阵。
    第 n+2 行至第 2n+1 行：输入 n×n 的目标乔斯方阵。
  输出
    共 1 行, 表示最小的操作序号。
  样例输入
    9
    ccxpnuwxc
    iqiaosimi
    ssymcbusx
    ihorivohq
    escaxapit
    jzowiaate
    isoqiotuy
    zrsnstksl
    trkipqoze
    ezoqpikrt
    lsktsnsrz
    yutoiqosi
    etaaiwozj
    tipaxacse
    qhovirohi
    xsubcmyss
    imisoaiqi
    cxwunpxcc
  样例输出
    2
  提示
    对于 100% 的数据，6 ≤ n ≤ 10。
*/

#include <bits/stdc++.h>
using namespace std;

char a[15][15];       // 当前方阵(二维数组)
char b[15][15] = {};  // 临时方阵(二维数组), 用来保存中间临时数据
char c[15][15] = {};  // 目标方阵(二维数组)
int n;  // 表示方阵的行或列的值

// 将当前方阵 a 顺时针旋转 90度
void xz() {
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            b[j][n+1-i] = a[i][j];
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            a[i][j] = b[i][j];
        }
    }
}

// 对当前方阵 a 进行水平翻转
void sp() {
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j  <= n; j++) {
            b[i][n+1-j] = a[i][j];
        }
    }

    for (int i = 1; i <= n; i++) {
        for (int j = 1;j <= n; j++) {
            a[i][j] = b[i][j];
        }
    }
}

// 检查当前方阵和目标方阵是否相同。如果相同，则返回值为 1；否则返回值为 0。
int check() {
    for (int i = 1; i <= n; i++) {
        for (int j =1; j <= n; j++) {
            if (a[i][j] != c[i][j]) {
                return 0;
            }
        }
    }

    return 1;
}

int main() {
    cin >> n;

    for (int i= 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> a[i][j];
        }
    }

    for(int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> c[i][j];
        }
    }

    if (check() == 1) {
        cout << 6;
        return 0;
    }

    xz();
    if (check() == 1) {
        cout << 1;
        return 0;
    }

    xz();
    if (check() == 1) {
        cout << 2;
        return 0;
    }

    xz();
    if (check() == 1) {
        cout << 3;
        return 0;
    }

    xz();
    sp();
    if (check() == 1) {
        cout << 4;
        return 0;
    }

    xz();
    if (check() == 1) {
        cout << 5;
        return 0;
    } else {
        xz();
        if (check() == 1) {
            cout << 5;
            return 0;
        } else {
            xz();
            if (check() == 1) {
                cout << 5;
                return 0;
            }
        }
    }

    cout << 7;

    return 0;
}